<!DOCTYPE html>
<html>

<head>
    <!-- 一道面试题 -->
    <!-- https://juejin.im/post/6859121743869509646 -->
    <meta charset="utf-8">
    <title>图片预览</title>

    <script>

        /**
         * 如下为一段代码，请完善sum函数，使得 sum(1,2,3,4,5,6) 函数返回值为 21 ,
         * 需要在 sum 函数中调用 asyncAdd 函数，且不能修改asyncAdd函数，sum函数中不能使用+运算符
         */



        /**
         * 请在 sum函数中调用此函数，完成数值计算
         * @param {*} a 要相加的第一个值
         * @param {*} b 要相加的第二个值
         * @param {*} callback 相加之后的回调函数
         */
        function asyncAdd(a, b, callback) {
            setTimeout(function () {
                console.log(a, b);

                callback(null, a + b)
            }, 1000)
        }


        asyncAdd(1, 2, (_, result) => {
            asyncAdd(result, 3, (_, result) => {
                asyncAdd(result, 4, (_, result) => {

                });
            });
        });



    </script>

    <script>

        let count = 0;

        function add2(x) {
            return new Promise(resolve => {
                asyncAdd(count, x, (_, result) => {
                    count = result;
                    resolve();
                })
            });
        }

        /**
         * 请在此方法中调用asyncAdd方法，完成数值计算
         * @param  {...any} rest 传入的参数
         */
        async function sum(...rest) {

            const arr = [];

            for (let n of rest) {
                arr.push(add2(n));
            }

            await Promise.all(arr);

            return count;

        }


        let start = window.performance.now()
        sum(1, 2, 3, 4, 5, 6).then(res => {
            // 请保证在调用sum方法之后，返回结果21
            console.log(res)
            console.log(`程序执行共耗时: ${window.performance.now() - start}`)
        })
    </script>
</head>

<body>

</body>

</html>